package k2_oop.p2_inheritAndPolymorphic.demo06;

/**
 * 创建Account类的一个子类CheckAccount代表可透支的账户
 * 该账户中定义一个属性overdraft代表可透支限额
 * 在CheckAccount类中重写withdraw方法，其算法如下
 *   如果（取款金额<账户余额），
 *    	可直接取款
 *   如果（取款金额>账户余额），
 *    	计算需要透支的额度
 *
 *   判断可透支额 overdraft 是否足够支付本次透支需要，如果可以
 *     将账户余额修改为0，冲减可透支金额
 *   如果不可以
 *   提示用户超过可透支额的限额
 */
public class CheckAccount extends Account{
    //表示可透支的额度
    private double overdraft;

    public CheckAccount(int id, double balance, double annualInterestRate, double overdraft) {
        super(id, balance, annualInterestRate);
        this.overdraft = overdraft;
    }

    @Override
    public void withdraw(double amount) {
        //初始化需要被透支的金额
        double needOverDraftMoney = 0;
        //初始化取款后的提示信息
        String info = "取款成功，余额为：%.2f ,透支了:%.2f ，剩余额度为：%.2f \n";

        if(amount<=this.getBalance()){
            this.setBalance(this.getBalance()-amount);
            System.out.printf(info,this.getBalance(),needOverDraftMoney,this.overdraft);
        }else{
            //需要透支的钱=要取的钱-现有的钱
            needOverDraftMoney = amount-this.getBalance();
            if (needOverDraftMoney<this.overdraft) {
                this.setBalance(0);
                this.overdraft-=needOverDraftMoney;
                System.out.printf(info,this.getBalance(),needOverDraftMoney,this.overdraft);
            }else{
                System.out.println("余额不足，透支额度也不足，无法取款");
            }
        }
    }

    public double getOverdraft() {
        return overdraft;
    }

    public void setOverdraft(double overdraft) {
        this.overdraft = overdraft;
    }
}
